package com.example.emos.wx.task;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.io.Serializable;

@Component
@Scope("prototype") // 一定要设置成多例的，因为对于多线程来说，单例不安全
public class EmailTask implements Serializable {
    // Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。
    // Serializable序列化接口没有任何方法或者字段，只是用于标识可序列化的语义
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${emos.email.system}")
    private String mailbox; // 发送邮件的邮箱号

    @Async
    public void sendAsync(SimpleMailMessage message) {
        message.setFrom(mailbox);
        message.setCc(mailbox); // 以免被SMTP认定为垃圾邮件，因此将邮件抄送一份发给自己(发件人)
        javaMailSender.send(message);
    }
}
